Indy TCPServer - Tipy Triky c. 678

Otázka od: Pavel Poles

11. 12. 2002 14:14

Zdravim,

mam trochu problem s Indy TCP serverem. Dle knizky Tipy a triky pro delphi,
trik c. 678 se snazim udelat jednoduchy prenos souboru. strana serveru je
treba
jen takto jednoducha:

procedure TForm1.TCPServerExecute(AThread: TIdPeerThread);
var
   FStream: TFileStream;
begin
      fStream.Create('c:\kuk.bat',fmOpenRead or fmShareDenyNone);
      Athread.Connection.WriteLn('Hallo world');
      Athread.Connection.OpenWriteBuffer;
      Athread.Connection.WriteStream(fStream);
      Athread.Connection.CloseWriteBuffer;
      FreeAndNil(fStream);
      AThread.Connection.Disconnect;
end;

Na strane serveru po spusteni mi vznika vyjimka EAccessVioaltion za radkem
 WriteStream, ale neni to pravidlem, nekdy uz i za radkem WriteLn.
Pouzivam port 20 a z klienta se pripojuju na 127.0.0.1:20

Netusite nekdo kde je chyba?

Pavel Poles

Odpovedá: ing. Jan Fiala

11. 12. 2002 14:26

11.12.2002 Pavel Poles:
> mam trochu problem s Indy TCP serverem. Dle knizky Tipy a triky pro delphi,
> trik c. 678 se snazim udelat jednoduchy prenos souboru. strana serveru je
> treba
> jen takto jednoducha:

> procedure TForm1.TCPServerExecute(AThread: TIdPeerThread);
> var
> FStream: TFileStream;
> begin
> fStream.Create('c:\kuk.bat',fmOpenRead or fmShareDenyNone);
> Athread.Connection.WriteLn('Hallo world');
> Athread.Connection.OpenWriteBuffer;
> Athread.Connection.WriteStream(fStream);
> Athread.Connection.CloseWriteBuffer;
> FreeAndNil(fStream);
> AThread.Connection.Disconnect;
> end;

> Na strane serveru po spusteni mi vznika vyjimka EAccessVioaltion za radkem
> WriteStream, ale neni to pravidlem, nekdy uz i za radkem WriteLn.
> Pouzivam port 20 a z klienta se pripojuju na 127.0.0.1:20

> Netusite nekdo kde je chyba?

Stream oteviras pro cteni - viz fmOpenRead a pokousis se do nej
zapisovat.

--
ing. Jan Fiala
mailto:jan.fiala@iol.cz

Odpovedá: Pavel Poles

11. 12. 2002 15:24

Do streamu se nepokousim zapsat. Funkce WriteStream ma parametr Astream,
ktery by mel byt potomke TStream (coz TFileStream je), a tento stream vezme,
PRECTE a da ho do bufferu. Funkce do streamu NEZAPISUJE.

PS: stejne sem to radsi zkusil a nefunguje to  

Pavel Poles

> 11.12.2002 Pavel Poles:
> > mam trochu problem s Indy TCP serverem. Dle knizky Tipy a triky pro
delphi,
> > trik c. 678 se snazim udelat jednoduchy prenos souboru. strana serveru
je
> > treba
> > jen takto jednoducha:
>
> > procedure TForm1.TCPServerExecute(AThread: TIdPeerThread);
> > var
> > FStream: TFileStream;
> > begin
> > fStream.Create('c:\kuk.bat',fmOpenRead or fmShareDenyNone);
> > Athread.Connection.WriteLn('Hallo world');
> > Athread.Connection.OpenWriteBuffer;
> > Athread.Connection.WriteStream(fStream);
> > Athread.Connection.CloseWriteBuffer;
> > FreeAndNil(fStream);
> > AThread.Connection.Disconnect;
> > end;
>
> > Na strane serveru po spusteni mi vznika vyjimka EAccessVioaltion za
radkem
> > WriteStream, ale neni to pravidlem, nekdy uz i za radkem WriteLn.
> > Pouzivam port 20 a z klienta se pripojuju na 127.0.0.1:20
>
> > Netusite nekdo kde je chyba?
>
> Stream oteviras pro cteni - viz fmOpenRead a pokousis se do nej
> zapisovat.
>
> --
> ing. Jan Fiala
> mailto:jan.fiala@iol.cz
>
>